package com.itheima.day11andIO流;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

/*8、【编号1905】对象序列化是一个用于将对象状态转换为字节流的过程，
可以将其保存到磁盘文件中或通过网络发送到任何其他程序；
从字节流创建对象的相反的过程称为反序列化。
现已知学生实体类（Student），包含姓名和年龄属性。
请编写程序将若干学生对象保存到当前模块的下的object.txt文件中，
保存成功后，还可以读取文件获取到这些学生对象。
提示：从文件中读取对象时，与读取其他数据不同，
readObject方法是通过抛出异常（EOFException）来表示到达文件末尾的，
所以循环读取多个对象时，可以通过捕获该异常来结束读取。
除了这种方式还可以怎样比较方便的将多个学生对象只读写一次，
以避免此问题？*/
public class Demo8 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ArrayList<Student> list = new ArrayList<>();
        Collections.addAll(list
                , new Student("张三", 23), new Student("李四", 23)
                , new Student("王五", 25), new Student("麻六", 26)
                , new Student("苏七", 27), new Student("王八", 28));
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream
                ("JavaSEhHomeWork\\object.txt"));
        oos.writeObject(list);
        oos.close();
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream
                ("JavaSEhHomeWork\\object.txt"));
        list = (ArrayList<Student>) ois.readObject();
        System.out.println(list);
        ois.close();
    }
}


class Student implements Serializable {
    private String name;
    private int age;
    private static final long serialVersionUID = 42L;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }
}